﻿/*{
author=pk2.2（HoneyBee、江东新风）
date=2022/04/02
}*/

// ## 2022/04/02 #江东新风# 菜单调整，条件限制 ##
// ## 2020/12/12 #江东新风# 修复trace参数类型错误 ##
// ## 2020/07/26 ##
/*
@ 제작자: HoneyBee
@ 내용: 모든 무장들의 능력을 RANDOM으로 재설정할 수 있는 SCRIPT


※ 무장의 능력에서 변경되는 요소
- 무장의 특기
- 무장의 능력치 (통솔, 무력, 지력, 정치, 매력)
- 무장의 성장 TYPE (초지속형 등..)
- 무장의 병종적성

*/


namespace 武将能力随机设定
{

	class Main
	{

		Main()
		{
			add_menu();
		}


		void add_menu()
		{
			pk::menu_item item;
			item.menu = global_menu::菜单_开局部署;
			item.is_enabled = cast<pk::menu_item_is_enabled_t@>(function() { return (!pk::is_campaign() and !pk::is_mission_running() and pk::get_scenario().turn_counter == 0); });
			item.get_text = cast<pk::menu_item_get_text_t@>(function() { return pk::encode("随机设置武将能力"); });
			item.get_desc = cast<pk::menu_item_get_desc_t@>(function()
			{
				if (pk::is_campaign()) return pk::encode("教程,决战称霸中不适用.");
				if (pk::is_mission_running()) return pk::encode("任务中不适用.");
				if (pk::get_scenario().turn_counter > 0) return pk::encode("游戏已进行,不能再随机更改.");
				return pk::encode("随机更改武将能力.");
			});
			item.handler = pk::menu_item_handler_t(handler);
			pk::add_menu_item(item);
		}

		bool handler()
		{
			array<string> items =
			{
				pk::encode("随机能力"),
				pk::encode("随机特技"),
				pk::encode("随机能力跟特技"),
				pk::encode("取消")
			};

			int answer = pk::choose(pk::encode("请选择武将要随机变更的类目?"), items);
			if (answer == 3) return false;

			pk::random random(pk::rand());
			pk::person@ 貂蝉 = pk::get_person(武将_貂蝉);

			auto building_list = pk::list_to_array(pk::get_building_list());

			array<int> skill_list;

			for (int i = 0; i <= 特技_单特技使用最大值; i += 1)
			{
				skill_list.insertLast(i);
			}
			for (int i = 1000; i <= 1044; i += 1)
			{
				skill_list.insertLast(i);
			}

			for (int i = 0; i < int(building_list.length); i++)
			{
				pk::building@ building = building_list[i];

				pk::person@ taishu = pk::get_person(pk::get_taishu_id(building));

				auto mibun_list = pk::list_to_array(pk::get_person_list(building, pk::mibun_flags(身份_君主, 身份_都督, 身份_太守, 身份_一般, 신분_재야, 身分_俘虏, 신분_미등장, 신분_미발견)));

				if (pk::is_alive(taishu))
				{
					for (int j = 0; j < int(mibun_list.length); j++)
					{
						pk::person@ person_0 = mibun_list[j];

						if (answer == 0 or answer == 2)
						{
							for (int k = 0; k < 武将能力_末; k++)
							{
								person_0.base_stat[k] = random(1, 100) + (pk::rand_bool(5) ? random(0, 20) : 0);
								person_0.stat_aging[k] = random(能力成长_超持续型, 能力成长_张飞型);
							}

							for (int k = 0; k < 병종_끝; k++)
							{
								person_0.tekisei[k] = random(0, 3) + (pk::rand_bool(5) ? random(0, 2) : 0);;
							}
						}

						if (answer == 1 or answer == 2)
						{
							array<int> temp_skill_list = skill_list;
							for (int k = 0; k < 3; k += 1)
							{
								if (k == 0)
								{
									int index = random(0, int(temp_skill_list.length - 1));
									person_0.skill = pk::rand_bool(10) ? -1 : temp_skill_list[index];
									temp_skill_list.removeAt(index);
								}
					            if (k == 1) {
					            	int index = random(0, int(temp_skill_list.length - 1));
									person_0.skill2 = pk::rand_bool(10) ? -1 : temp_skill_list[index];
									temp_skill_list.removeAt(index);
					            }
					            if (k == 2)
					            {
					            	int index = random(0, int(temp_skill_list.length - 1));
									person_0.skill3 = pk::rand_bool(10) ? -1 : temp_skill_list[index];
					            }
							}
						}

						person_0.update();

						// person_0.skill = random(特技_飞将, 特技_内助);

						// person_0.update();

					} // for 

				} // if 

			} // for 

			string desc = answer == 0 ? "能力" : (answer == 1 ? '特技' : '能力与特技');
			pk::message_box(pk::encode(pk::format("武将的{}已经变更了!", desc)), 貂蝉);
			pk::message_box(pk::encode("以崭新的心情游玩游戏把~"), 貂蝉);


			return true;

		} // bool handler

	} // class Main

	Main main;
}